package br.com.equus.bean;

import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.arquitetura.bean.PaginableBean;
import br.com.arquitetura.excecao.ExcecaoUtil;
import br.com.arquitetura.util.FacesMessagesUtil;
import br.com.arquitetura.util.StringUtil;
import br.com.equus.entidade.Fornecedor;
import br.com.equus.util.CnpjUtil;

@ManagedBean(name = "fornecedorBean")
@ViewScoped
public class FornecedorBean extends PaginableBean<Fornecedor> {

	private static final long serialVersionUID = 1L;

	public FornecedorBean() {
	}

	@Override
	public void verificarAcesso() {
		acessoBean.bloquearTela("ROLE_USER");
	}

	@Override
	public Fornecedor createModel() {
		return new Fornecedor();
	}

	@Override
	public String getQualifiedName() {
		return "Fornecedor";
	}

	@Override
	public boolean isFeminino() {
		return false;
	}

	@Override
	public Map<String, String> getFilters() {
		return null;
	}

	@Override
	public String save() {
		try {
			// retira mascara CPF
			if (getModel().getCnpj() != null) {
				getModel().setCnpj(StringUtil.unformat("##.###.###/####-##", getModel().getCnpj()));
			}
			// retira mascara telefone
			if (getModel().getTelefone() != null && !getModel().getTelefone().trim().equals("")) {
				getModel().setTelefone(getModel().getTelefone().trim().replaceAll("[()-]", ""));
			}
			if (!camposValidos()) {
				return ERROR;
			}

			super.save();
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}

		return SUCCESS;
	}

	public boolean camposValidos() throws Exception {
		// Validar CNPJ
		if (!CnpjUtil.isValidCNPJ(getModel().getCnpj())) {
			FacesMessagesUtil.addErrorMessage("CNPJ ", "Inválido");
			return false;
		}

		// CNPJ unico
		if (getModel().getCnpj() != null) {
			Fornecedor fornecedor = new Fornecedor();
			fornecedor.setCnpj(getModel().getCnpj());
			List<Fornecedor> lista = universalManager.listBy(fornecedor);
			if (lista != null && !lista.isEmpty() && !lista.get(0).getId().equals(getModel().getId())) {
				FacesMessagesUtil.addErrorMessage("CNPJ ", "Já cadastrado");
				return false;
			}
		}

		return true;
	}

}
